#include "GraficoTablaComun.h"
#include "Util.h"

void parseAtrib(const std::string& atrib, std::string& nombreRes, int& pos) {
	int sep_pos = atrib.find(Util::NUMERAL, 0);
	std::string pos_string = atrib.substr(0, sep_pos);
	std::string n = atrib.substr(sep_pos + 1, std::string::npos);

	pos = Auxiliar::stoi(pos_string);
	nombreRes = n;
}

void parseLine(std::string linea, std::vector<std::string>& tokens) {
	unsigned int pos = 0;
	while(linea.find(Util::PIPE, pos) != std::string::npos) {
		std::string token_s = linea.substr(pos, linea.find(Util::PIPE, pos) - pos);
		pos = linea.find(Util::PIPE, pos);
		if(!(pos == std::string::npos))
			pos++;
		tokens.push_back(token_s);
	}
	std::string token = linea.substr(pos, linea.find(ENDL));
	tokens.push_back(token);
}

/*
typedef Gtk::TreeModelColumn<std::string>  tColumn;

ModeloDeColumnas::ModeloDeColumnas(int cantColumnas) {
	tColumn* col;
	for(int i = 0; i < cantColumnas; i++) {
		col =new tColumn;
		columnitas.push_back(col);
		add(*col);
	}
}

ModeloDeColumnas::~ModeloDeColumnas() {
  	std::vector<tColumn*>::iterator it = columnitas.begin();
  		for(; it != columnitas.end(); it++)
  			delete *it;
  		columnitas.clear();
}
*/

GraficoTablaComun::GraficoTablaComun(int cantidadColumnas, std::vector<std::string>& idColumnas):columnas(cantidadColumnas) {
	set_border_width(5);
	set_size_request(350,300);

	ventanaEscrollable.add(visorModeloArbol);
	ventanaEscrollable.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);

	referenciaModelo = Gtk::ListStore::create(columnas);
	visorModeloArbol.set_model(referenciaModelo);

	unsigned int valor = 0;
	std::vector<std::string>::iterator it = idColumnas.begin();
	for(; it != idColumnas.end(); it++)
		visorModeloArbol.append_column((*it).c_str(), *columnas.columnitas[valor++]);

	add(ventanaEscrollable);
}

GraficoTablaComun::~GraficoTablaComun() {}

void GraficoTablaComun::limpiar() {
	referenciaModelo->clear();
}

void GraficoTablaComun::setRespuesta(std::list<std::string> resultado) {
	limpiar();
	std::list<std::string>::iterator it= resultado.begin();
	int i = 0;
	for(;it!=resultado.end();it++){
		std::cout<< "fila numero " << i <<*it<<std::endl;
		setFila(*it);
		++i;
	}
}

void GraficoTablaComun::setFila(std::string & fila) {
	std::cout << "fila "<< fila << std::endl;
	fila.resize(fila.size() - 1);
	Gtk::TreeModel::Row row = *(referenciaModelo->append());
	std::vector<std::string> atribs;
	parseLine(fila, atribs);
	std::vector<std::string>::iterator it2;
	for(it2 = atribs.begin(); it2 != atribs.end(); ++it2)
		std::cout << " Atributo  " << *it2 << std::endl;

	int i = 0;
	for(;i < columnas.columnitas.size(); ++i) {
		std::string nombre;
		int pos;
		parseAtrib(atribs[i], nombre, pos);
		row[*(columnas.columnitas[i])] = nombre;
	}

}


